﻿#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>

//给定一个链表的头节点  head ，返回链表开始入环的第一个节点。 如果链表无环，则返回 null。
//如果链表中有某个节点，可以通过连续跟踪 next 指针再次到达，则链表中存在环。 为了表示给定链表中的环，评测系统内部使用整数
//pos 来表示链表尾连接到链表中的位置（索引从 0 开始）。如果 pos 是 - 1，则在该链表中没有环。注意：pos 不作为参数进行传递，仅仅是为了标识链表的实际情况。
//不允许修改 链表。
//示例 1：
//输入：head = [3, 2, 0, -4], pos = 1
//输出：返回索引为 1 的链表节点
//解释：链表中有一个环，其尾部连接到第二个节点。



/**
 * Definition for singly-linked list.
 * struct ListNode {
 *     int val;
 *     struct ListNode *next;
 * };
 */
//struct ListNode* detectCycle(struct ListNode* head) {
//    struct ListNode* fast = head;
//    struct ListNode* slow = head;
//    while (fast && fast->next)
//    {
//        fast = fast->next->next;
//        slow = slow->next;
//        if (fast == slow)
//        {
//            struct ListNode* meet = slow;
//            struct ListNode* start = head;
//            while (meet != start)
//            {
//                meet = meet->next;
//                start = start->next;
//
//            }
//            return meet;
//        }
//    }
//    return NULL;
//
//}

//静态变量
//void test1()
//{
//	static int a = 1;
//	a++;
//}
//
//int* test2()
//{
//	static int a[10] = { 0 };
//	a[0] = 1;
//	a[1] = 2;
//	a[2] = 3;
//	a[3] = 4;
//	return a;
//}
//
//int main()
//{
//	test1();
//	int* a = test2();
//
//	int i = 0;
//	for (i = 0; i < 10; i++)
//	{
//		printf("%d ", a[i]);
//	}
//	return 0;
//}

//给定两个数组 nums1 和 nums2 ，返回 它们的交集 。输出结果中的每个元素一定是 唯一 的。我们可以 不考虑输出结果的顺序 。
//示例 1：
//输入：nums1 = [1, 2, 2, 1], nums2 = [2, 2]
//输出：[2]
//示例 2：
//输入：nums1 = [4, 9, 5], nums2 = [9, 4, 9, 8, 4]
//输出：[9, 4]
//解释：[4, 9] 也是可通过的

//int* intersection(int* nums1, int nums1Size, int* nums2, int nums2Size, int* returnSize) {
//
//    int i = 0;
//    int j = 0;
//    *returnSize = 0;
//    int* arr = (int*)calloc(1000, sizeof(int));
//    for (i = 0; i < nums1Size; i++)
//    {
//        for (j = 0; j < nums2Size; j++)
//        {
//            if (nums1[i] == nums2[j])
//            {
//                break;
//            }
//        }
//        if (j == nums2Size)
//        {
//            continue;
//        }
//        for (j = 0; j < *returnSize; j++)
//        {
//            if (nums1[i] == arr[j])
//                break;
//        }
//        if (j == *returnSize)
//        {
//            arr[*returnSize] = nums1[i];
//            *returnSize += 1;
//        }
//    }
//
//    return arr;
//
//}


int pivotIndex(int* nums, int numsSize) {

    int i = 0, j = 0;
    for (i = 0; i < numsSize; i++)
    {
        int leftsum = 0;
        int rightsum = 0;
        for (j = 0; j < numsSize; j++)
        {
            if (i > j)
                leftsum += nums[j];
            else if (i < j)
                rightsum += nums[j];
        }
        if (leftsum == rightsum)
        {
            return i;
        }
    }
    return -1;
}